/*
 * Copyright (C), 2007-2018, 铭师堂教育科技有限公司
 * FileName: CmdbService.java
 * Author:   zhaoyi
 * Date:     2018年7月13日 上午9:22:10
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.secsbrain.cloudconsole.remote;

import java.util.List;

import com.secsbrain.common.ResponseVo;
import com.secsbrain.deploy.client.model.BatchBuildParam;
import com.secsbrain.deploy.client.model.BatchBuildResult;
import com.secsbrain.deploy.client.model.BuildLog;
import com.secsbrain.deploy.client.model.BuildModelDto;
import com.secsbrain.deploy.client.model.BuildParam;
import com.secsbrain.deploy.client.model.BuildQuery;
import com.secsbrain.deploy.client.model.BuildRecord;
import com.secsbrain.deploy.client.model.DeployParam;
import com.secsbrain.deploy.client.model.HealthDto;
import com.secsbrain.deploy.client.model.JobNameBuildParam;

/**
 * DEPLOY相关服务
 *
 * @author zhaoyi
 */
public interface DeployRemoteService {
	
	/**
     * 功能描述: <br>
     * 创建构建任务
     *
     * @param  appName   应用名称
     * @return 构建ID
     */
	ResponseVo<?> createDeployJob(DeployParam deployParam);
	
	/**
     * 功能描述: <br>
     * 更新构建任务
     *
     * @param  appName   应用名称
     * @return 构建ID
     */
	ResponseVo<?> updateDeployJob(DeployParam deployParam);
	
	 /**
     * 功能描述: <br>
     * 删除构建任务
     *
     * @param deployParam
     * @return
     */
	ResponseVo<?> deleteDeployJob(DeployParam deployParam);
	
	/**
     * 功能描述: <br>
     * 查询所有构建模型
     *
     * @return 
     */
	ResponseVo<List<BuildModelDto>> queryAllBuildModel();
	
	/**
     * 功能描述: <br>
     * 通过应用ID查询构建模型
     *
     * @param  appId   应用ID
     * @return 
     */
	ResponseVo<BuildModelDto> queryBuildModelByApp(Long appId);
	
	/**
     * 功能描述: <br>
     * 获取分支列表
     *
     * @param  gitUrl   git地址
     * @return 
     */
	ResponseVo<List<String>> queryBranchList(String gitUrl);
	
	/**
     * 功能描述: <br>
     * 构建准备（审批通过创建记录，不执行构建）
     *
     * @param  buildParam   构建参数
     * @return 构建ID
     */
	ResponseVo<Long> buildPre(BuildParam buildParam);
	
	/**
     * 功能描述: <br>
     * 执行构建
     *
     * @param  buildParam   构建参数
     * @return 构建ID
     */
	ResponseVo<Long> build(BuildParam buildParam);
    
    /**
     * 功能描述: <br>
     * 批量执行构建
     *
     * @param  batchBuildParam   批量构建参数
     * @return 批量构建结果
     */
    ResponseVo<BatchBuildResult> buildBatch(BatchBuildParam batchBuildParam);
    
    /**
     * 功能描述: <br>
     * 直接通过jobName执行构建
     *
     * @param  jobName   jenkins job名称
     * @return  
     */
	ResponseVo<?> buildByJobName(JobNameBuildParam jobNameBuildParam);
    
    /**
     * 功能描述: <br>
     * 获取构建日志
     *
     * @param  buildId   构建ID
     * @return
     */
    ResponseVo<BuildLog> getBuildLog(Long buildId,Long start,String envName);
    
    /**
     * 功能描述: <br>
     * 通过构建ID获取构建记录
     *
     * @param  buildId   构建ID
     * @param  envName   环境名称
     * @return
     */
    ResponseVo<BuildRecord> queryBuildRecordByBuildId(Long buildId,String envName);
    
    /**
     * 功能描述: <br>
     * 通过批次ID获取应用构建记录列表
     *
     * @param  appId   应用ID
     * @return
     */
    ResponseVo<List<BuildRecord>> queryBuildListByBatchId(Long batchId);
    
    /**
     * 功能描述: <br>
     * 通过应用ID获取应用构建记录列表（分页查询）
     *
     * @param  appId   应用ID
     * @return
     */
    ResponseVo<List<BuildRecord>> queryBuildListByAppId(Long appId,String envName, Integer page, Integer limit);
    
    /**
     * 功能描述: <br>
     * 获取应用构建记录列表（分页查询）
     *
     * @param  page        页码
     * @param  limit       条数
     * @param  sortBy      排序字段
     * @param  descending  排序方式
     * @param  buildQuery  查询参数
     * 
     * @return
     */
    ResponseVo<List<BuildRecord>> queryAllBuildList(Integer page, Integer limit, String sortBy, String descending,BuildQuery buildQuery);
    
    /**
     * 功能描述: <br>
     * 通过分组ID、环境获取应用构建记录列表
     *
     * @param  groupId   分组ID
     * @param  envName   环境名
     * @return
     */
    ResponseVo<List<BuildRecord>> queryBuildListByGroupId(Long groupId,String envName);
   
    /**
     * 功能描述: <br>
     * 灰度切流
     *
     * @param  groupId   分组ID
     * @param  percent   百分比
     * @return
     */
    ResponseVo<Integer> percentRelease(Long groupId,Integer percent);

    /**
     * 功能描述: <br>
     * 健康检查
     *
     * @param  healthDto 健康检查对象
     * @param  envName   环境名
     * @return  
     */
    ResponseVo<?> healthCheck(HealthDto healthDto,String envName);
    
    /**
     * 功能描述: <br>
     * 上线服务
     *
     * @param appId   应用ID
	 * @param host    待上线的主机名
	 * @param  envName   环境名
     * @return  
     */
    ResponseVo<?> serverUp(Long appId,String host,String envName);

}
